const Router = require('koa-router');
const router = new Router();
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken')
const gravatar = require('gravatar');
const passport = require('koa-passport')
const tools = require('./../../config/tools')
const keys = require('./../../config/keys')
//引入user
const User = require('../../models/User');

/**
 * 
 * @router GET api/users/tset
 * @desc 测试接口
 * @access 接口是公开的
 */
router.get('/test', async ctx => {
	ctx.status = 200;
	ctx.body = { msg: 'users works' }
})

/**
 * 
 * @router POST api/users/register
 * @desc 注册接口
 * @access 接口是公开的
 */
router.post('/register', async ctx => {
	// console.log(ctx.request.body)
	//存储到数据库
	const findResult = await User.find({ email: ctx.request.body.email })
	console.log(findResult);
	if (findResult.length > 0) {
		ctx.status = 500;
		ctx.body = { 'email': '邮箱已被占用' }
	} else {
		const avatar = gravatar.url(ctx.request.body.email, { s: '200', r: 'pg', d: 'mm' });
		//没查到
		const newUser = new User({
			name: ctx.request.body.name,
			email: ctx.request.body.email,
			avatar,
			password: tools.enbcrypt(ctx.request.body.password)
		});
		// console.log(newUser);
		//存储到数据库
		await newUser.save().then(user => {
			ctx.body = user;
		})
			.catch(err => {
				console.log(err);
			})
		//返回json数据
		ctx.body = newUser;
	}
});

/**
 * 
 * @router POST api/users/login
 * @desc 登陆接口 返回token
 * @access 接口是公开的
 */
router.post('/login', async ctx => {
	//查询
	const findResult = await User.find({ email: ctx.request.body.email });
	const user = findResult[0];
	const password = ctx.request.body.password;

	//判断查没查到
	if (findResult.length == 0) {
		ctx.status = 404;
		ctx.body = { email: '用户不存在' }
	} else {
		//查到后 验证密码
		var result = await bcrypt.compareSync(password, user.password); // true
		//验证通过
		if (result) {
			//返回token
			const payload = {
				id: user.id,
				name: user.name,
				avatar: user.avatar
			};
			const token = jwt.sign(payload, keys.secretOrKey, { expiresIn: 3600 })


			ctx.status = 200;
			ctx.body = { success: true, token: 'Bearer ' + token };
		} else {
			ctx.status = 400;
			ctx.body = { password: "密码错误" }
		}
	}
});

/**
 * 
 * @router GET api/users/current
 * @desc 用户信息接口地址 返回用户信息
 * @access 接口是私密的
 */
router.get('/current', passport.authenticate('jwt', { session: false }), async ctx => {
	ctx.body = {
		id: ctx.state.user.id,
		name: ctx.state.user.name,
		email: ctx.state.user.email,
		avatar: ctx.state.user.avatar

	};
})



module.exports = router.routes()